home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_11_06
/
1106134a
< prev
next >
Wrap
Text File
|
1993-02-26
|
2KB
|
92 lines
/* ddir.c: Remove directory tree */
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
/* All POSIX-compliant systems have this one */
#include <dirent.h>
/* Borland C also requires this one */
#include <dir.h>
/* This is required to redirect stderr on DOS */
#include "stderr.h"
/* DOS-specific macros - change for other OS */
#define CMD_FORMAT "del *.* <%s > nul"
#define CMD_LEN 17
/* Change this to "/" for UNIX */
char Response_file[L_tmpnam+1] = "\\";
void rd(char *);
main(int argc, char **argv)
{
FILE *f;
char *old_path = getcwd(NULL,FILENAME_MAX);
/* Create response file for DOS del command */
tmpnam(Response_file+1);
assert((f = fopen(Response_file,"w")) != NULL);
fputs("Y\n",f);
fclose(f);
/* Delete the directories */
while (--argc)
rd(*++argv);
/* Clean-up */
remove(Response_file);
chdir(old_path);
free(old_path);
return 0;
}
void rd(char * dir)
{
char sh_cmd[L_tmpnam+CMD_LEN];
DIR *dirp;
struct dirent *entry;
struct stat finfo;
/* Log onto the directory that is to be deleted */
assert(chdir(dir) == 0);
printf("%s:\n",strlwr(dir));
/* Delete all normal files via OS shell */
hide_stderr();
sprintf(sh_cmd,CMD_FORMAT,Response_file);
system(sh_cmd);
restore_stderr();
/* Delete any remaining directory entries */
assert((dirp = opendir(".")) != NULL);
while ((entry = readdir(dirp)) != NULL)
{
if (entry->d_name[0] == '.')
continue;
stat(entry->d_name,&finfo);
if (finfo.st_mode & S_IFDIR)
rd(entry->d_name); /* Subdirectory */
else
{
/* Enable delete of file, then do it */
chmod(entry->d_name,S_IWRITE);
assert(unlink(entry->d_name) == 0);
}
}
closedir(dirp);
/* Remove the directory from its parent */
assert(chdir("..") == 0);
assert(rmdir(dir) == 0);
}